/* 
泛型约束
*/
(() => {
  /* 
  泛型默认内部是没有属性/方法
  如何让泛型有属性/方法呢?
  */
  // 定义包含length属性的接口
  interface Lengthable {
    length: number
  }

  // 感觉TS中将泛型看待成接口还是类?   
  // T是一个特别的接口
  function getLength<T extends Lengthable>(value: T): number {
    return value.length
  }

  getLength('abc') // 字符串有length
  // getLength(123) // error  数字没有length

})()

/* 
extends:
一个类继承于另一个类
一个接口继承于另一个接口

一个类实现/implements一个接口
*/